1. 데이터 전송 기초 1
1. OSI 7계층 (Open Systems Interconnection Model)
네트워크 통신을 7단계로 나누어 설명하는 모델
| 계층 | 역할 | 대표 프로토콜/기술 |
|---|---|---|
| 7. 응용 계층 (Application) | 사용자와 직접 상호작용 | HTTP, FTP, SMTP, DNS |
| 6. 표현 계층 (Presentation) | 데이터 형식 변환, 암호화/복호화 | JPEG, MPEG, TLS/SSL |
| 5. 세션 계층 (Session) | 통신 세션 관리 (연결/유지/종료) | NetBIOS, RPC |
| 4. 전송 계층 (Transport) | 신뢰성 있는 전송 (흐름/에러 제어) | TCP, UDP |
| 3. 네트워크 계층 (Network) | 경로 선택, 주소 지정 | IP, ICMP, ARP |
| 2. 데이터링크 계층 (Data Link) | 프레임 전송, 오류 검출 | Ethernet, PPP, MAC |
| 1. 물리 계층 (Physical) | 실제 비트 전송 (하드웨어) | 케이블, 허브, 전송 신호 |
2. 데이터 전송 방식: 동기 vs 비동기
동기 통신 (Synchronous Communication)
- 송수신 장치가 공통의 클럭 신호를 맞추어 데이터 전송
- 데이터 흐름이 일정하고 빠름
- 예: 이더넷(Ethernet), SPI
비동기 통신 (Asynchronous Communication)
- 별도의 클럭 없이, Start bit(트리거)로 전송 시작
- 느리지만 구현이 간단
- 예: UART, RS-232
클럭(Clock)
- 클럭은 네트워크 장치(송신기/수신기)가 데이터를 주고받을 때 시간 기준(박자, 타이밍 신호) 을 맞추는 역할을 하는 신.
- 동기 통신에서는 송수신자가 같은 클럭을 공유해야 비트의 시작과 끝을 정확히 구분할 수 있다.
클럭을 쓰는 이유
- 데이터는 전기 신호로 흘러가기 때문에, 수신기가 “언제 값을 읽어야 하는지” 모르면
1010이1100으로 해석될 수 있음. - 그래서 송신자와 수신자가 같은 박자(클럭) 를 공유하거나, 특별한 신호(Start bit 등) 를 기준 삼아 박자를 맞추는 방식이 필요함.
3. 데이터 전송 구조: 헤더와 페이로드
네트워크에서 데이터는 패킷(Packet) 단위로 전송된다.
- 헤더(Header): 제어 정보 (출발지/목적지 주소, 프로토콜, 순서 등)
- 페이로드(Payload): 실제 전송하려는 데이터 (텍스트, 파일, 영상 등)
패킷 = 헤더 + 페이로드
4. TCP 통신 (Transmission Control Protocol)
- 신뢰성 있는 연결 지향 프로토콜
- 특징:
- 연결 확립: 3-way handshake
- 데이터 순서 보장 (시퀀스 번호)
- 오류 검출 및 재전송
- 흐름 제어, 혼잡 제어
5. 다이어그램
OSI 7계층 구조
OSI 7계층 구조 (위에서 아래로):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
7. 응용 계층 (Application)
└─ HTTP, FTP, DNS
↓
6. 표현 계층 (Presentation)
└─ TLS, SSL, JPEG
↓
5. 세션 계층 (Session)
└─ RPC, NetBIOS
↓
4. 전송 계층 (Transport)
└─ TCP, UDP
↓
3. 네트워크 계층 (Network)
└─ IP, ICMP, ARP
↓
2. 데이터 링크 계층 (Data Link)
└─ Ethernet, PPP
↓
1. 물리 계층 (Physical)
└─ 케이블, 신호
동기 vs 비동기 통신
동기 통신 (Synchronous):
1. 송신기 → 수신기: 클럭 + 데이터(101010...)
- 동일한 클럭으로 비트 경계를 맞춤
- 송수신 장치가 공통의 타이밍 신호 공유
비동기 통신 (Asynchronous):
2. 송신기 → 수신기: Start bit → Data bits → Stop bit
- 클럭 없음, Start bit 기준으로 수신
- 별도의 클럭 신호 불필요
TCP 3-way handshake
TCP 연결 수립 과정:
1. Client → Server: SYN (연결 요청)
"연결하고 싶습니다"
2. Server → Client: SYN + ACK (응답)
"연결 요청 받았습니다, 저도 연결 준비됐습니다"
3. Client → Server: ACK (확인)
"확인했습니다, 연결 시작하겠습니다"
→ 연결 완료 후 데이터 전송 시작